<?php


namespace Before\Decorator;


class Client
{
    public static function main()
    {
        // 创建原始构件
        $componentA = new ComponentA();

        // 直接取得原始构件的结果
        $result = $componentA->operation();

        // 对构件结果进行 倾斜+删除 装饰
        $result = "<i>$result</i>";  // 字体倾斜
        $result = "<s>$result</s>";  // 字体删除

        // 对构件结果进行 加粗+超链接 装饰
        $result = "<b>$result</b>";  // 字体加粗
        $result = "<a>$result</a>";  // 超链接

        // 取得装饰后的结果
        echo $result, PHP_EOL;
    }
}


// 被装饰构件
class ComponentA
{
    public function operation(): string
    {
        return 'operation A from ComponentA.';
    }
}
class ComponentB
{
    public function operation(): string
    {
        return 'operation B from ComponentB.';
    }
}


Client::main();
